package com.atguigu.juc.day01.sleep;

public class Demo02Wait {

    public static void main(String[] args) {

        // 1、创建一个普通 Object 对象作为锁对象
        Object lockObj = new Object();

        // 2、创建 A 线程占用锁
        new Thread(()->{

            try {
                synchronized (lockObj) {
                    System.out.println(Thread.currentThread().getName() + " 得到了锁。");

                    // wait() 无参方法：让当前线程进入等待状态后，必须由其它线程来唤醒，自己不能唤醒自己
                    // lockObj.wait();

                    // wait() 有参方法：可以指定等待时间，到时间后线程自己自动醒来
                    lockObj.wait(10 * 1000);

                    System.out.println(Thread.currentThread().getName() + " 释放了锁。");
                }

            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }

        }, "thread-a").start();

        // 3、创建 B 线程
        new Thread(()->{

            synchronized (lockObj) {
                System.out.println(Thread.currentThread().getName() + " 得到了锁。");
            }

        }, "thread-b").start();

    }

}
